import App from './App';
import store from './store';
import {
	setupRouterInterceptor
} from '@/utils/interceptor.js'; // 路由拦截器
import {
	setupRequestInterceptor
} from '@/utils/requestInterceptor.js'; // 请求拦截器
//引入websocket文件
import wsRequest from '@/utils/webSoketUtil.js'

// 定义 WebSocket 连接的全局变量
let websocket = null;

// 获取 userId
const userId = store.state.user.userId;

if (userId) {
  console.log("用户已登录，准备初始化 WebSocket");
  // 用户已登录，进行 WebSocket 连接
  websocket = new wsRequest(`ws://localhost:8080/websocket/`, 30000, userId);
  console.log("WebSocket 已初始化，用户 ID:", userId);

  // 将 websocket 挂载到 Vue 实例中
  Vue.prototype.$socket = websocket;
} else {
  console.log("用户未登录，等待登录后再连接 WebSocket");
}

// 监听登录状态的变化（假设使用 Vuex）
store.watch(
  (state) => state.user.userId,
  (newUserId) => {
    if (newUserId) {
      console.log("用户已登录，准备初始化 WebSocket");
      // 用户已登录，进行 WebSocket 连接
      websocket = new wsRequest(`ws://localhost:8080/websocket/`, 30000, newUserId);
      console.log("WebSocket 已初始化，用户 ID:", newUserId);

      // 更新 Vue 实例中的 $socket
      Vue.prototype.$socket = websocket;
    }
  }
);
// 确保 WebSocket 实例挂载到 Vue 实例中
Vue.prototype.$socket = websocket;



// #ifndef VUE3
import Vue from 'vue';
import './uni.promisify.adaptor';

Vue.config.productionTip = false;
App.mpType = 'app';

// 页面加载时进行一次全局登录验证
const token = sessionStorage.getItem('token');

// 确保 token 不存在时跳转到登录页面
if (!token) {
	// 显示提示，确保用户知道需要登录
	uni.showToast({
		title: '请先登录',
		icon: 'none',
	});

	// 延迟跳转，确保提示信息展示后再进行跳转
	setTimeout(() => {
		try {
			// 跳转到登录页面
			uni.reLaunch({
				url: '/pages/login/login',
			});
		} catch (error) {
			console.error('跳转失败:', error);
		}
	}, 0);
} else {
	console.log('用户已登录，token:', token);
}

// 设置路由拦截器
setupRouterInterceptor();
// 设置请求拦截器
setupRequestInterceptor();

const app = new Vue({
	store,
	...App,
});
app.$mount();
// #endif

// #ifdef VUE3
import {
	createSSRApp
} from 'vue';

export function createApp() {
	const app = createSSRApp(App);

	// 设置路由和请求拦截器
	setupRouterInterceptor();
	setupRequestInterceptor();

	return {
		app,
	};
}
// #endif